package com.example.kemgdemo.aspect;

import com.example.kemgdemo.enums.ExceptionEnum;
import com.example.kemgdemo.excepiton.BaseException;
import com.example.kemgdemo.util.CookieUtil;
import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;

/**
 * 学号：1401030048
 * Created by 梁嘉伟 on 2019/7/18
 */

@Aspect
@Component
@Slf4j
public class PermissionAspect {

    /**
     * 例: execution(* com.jiuxian..service.*.*(..))
     *
     * execution 表达式的主体
     * 第一个* 代表任意的返回值
     * com.jiuxian aop所横切的包名
     * 包后面.. 表示当前包及其子包
     * 第二个* 表示类名，代表所有类
     * .*(..) 表示任何方法,括号代表参数 .. 表示任意参数
     *
     *
     * 例: execution(* com.jiuxian..service.*Service.add*(String))
     *
     * 表示： com.jiuxian 包及其子包下的service包下，类名以Service结尾，方法以add开头，参数类型为String的方法的切点。
     */
    @Pointcut(value = "execution(* com.example.kemgdemo.controller.*Service.get*(..))")
    public void PermissionPointcut(){ }


    @Before("PermissionPointcut()")
    public void checkLogin() {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();


        //  todo 查询cookie
        Cookie cookie = CookieUtil.getCookie(" ");
        if (cookie == null) {
            log.warn("找不到TOKEN");
            throw new BaseException(ExceptionEnum.USER_IS_NOT_LOGIN);
        }
        //查询redis
//        String tokenValue=redisTemplate.opsForValue().get(String.format(RedisConstant.TOKEN_PREFIX,cookie.getValue()));
//        if (StringUtils.isEmpty(tokenValue)){
//            log.warn("  Redis中查不到token");
//            throw new BaseException(ExceptionEnum.USER_IS_NOT_LOGIN);
//        }
    }

}
